import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores/user.js'
import Layout from '@/layout/user/index.vue'
/* 引入NProgress滚动条 */
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { ElMessage } from 'element-plus'
/* 默认路由配置 */
const commonRoutes = [
  {
    path: '/',
    component: Layout,
    redirect: '/',
    children: [
      {
        path: '/',
        name: 'index',
        component: () => import('@/views/index.vue'),
        meta: { title: '编程智航-首页' }
      },
      {
        path: '/aichat',
        name: 'aichat',
        component: () => import('@/views/userpage/aichat/AiChat.vue'),
        meta: { title: '编程智航-AI聊天' }
      },
      {
        path: '/personalise',
        name: 'personalise',
        component: () => import('@/views/userpage/personalise/Personalise.vue'),
        meta: { title: '编程智航-个性化学习' }
      },
      {
        path: '/personalcenter',
        name: 'personalcenter',
        component: () => import('@/views/userpage/personalcenter/PersonalCenter.vue'),
        meta: { title: '编程智航-个人中心' }
      }
    ]
  },
  {
    path: '/:pathMatch(.*)*',
    name: 'NotFound',
    component: () => import('@/views/adminpage/error/404.vue'),
    meta: { title: '编程智航-404' }
  },
  {
    path: '/admin/403',
    name: 'Forbidden',
    component: () => import('@/views/adminpage/error/403.vue'),
    meta: { title: '编程智航-403' }
  },
  {
    path: '/admin/refresh',
    name: 'refresh',
    component: () => import('@/layout/admin/components/refresh.vue')
  }
]
/* 管理员界面路由 */
const frontRouter = import.meta.glob('./admin/index/index.js', { eager: true }) // 读取首页模块路由
const sampleRouter = import.meta.glob('./admin/sample/index.js', { eager: true }) // 读取示例演示模块路由
const manageRouter = import.meta.glob('./admin/manage/index.js', { eager: true }) // 读取管理模块路由
const errorRouter = import.meta.glob('./admin/error/index.js', { eager: true }) // 读取错误模块路由
/* 用户界面路由 */
const tempRouter = import.meta.glob('./user/temp/index.js', { eager: true }) // 读取临时路由

// 合并路由
const routes = [
  ...commonRoutes,
  ...Object.values(frontRouter).flatMap((r) => r.default),
  ...Object.values(sampleRouter).flatMap((r) => r.default),
  ...Object.values(manageRouter).flatMap((r) => r.default),
  ...Object.values(errorRouter).flatMap((r) => r.default),
  ...Object.values(tempRouter).flatMap((r) => r.default)
]
// 定义一个路由对象
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes
})

/* NProgress滚动条配置 */
NProgress.configure({
  easing: 'ease', // 动画方式
  speed: 500, // 递增进度条的速度
  showSpinner: false, // 是否显示加载ico
  trickleSpeed: 200, // 自动递增间隔
  minimum: 0.3 // 初始化时的最小百分比
})

/* 配置全局路由守卫 */
// 进入路由前
// router.beforeEach(async (to, from, next) => {
//   NProgress.start() // 每次切换页面时，调用进度条
//   // 判断本地是否记录token值
//   const userStore = useUserStore()
//   const token = userStore.getToken()
//   // 判断是否尝试访问管理员页面
//   const isAdminRoute = to.matched.some((record) => record.path.startsWith('/admin'))
//   if (token) {
//     // 如果有meta中有title,则标题为title
//     if (to.meta.title) {
//       document.title = to.meta.title
//     } else {
//       document.title = '编程智航'
//     }
//     // 判断是否已经加载数据
//     const isLoaded = userStore.isLoaded()
//     // 如果没有加载
//     if (!isLoaded) {
//       await userStore
//         .loadUser()
//         .then(() => {
//           userStore.setLoaded(true) // 加载用户信息
//         })
//         .catch(() => {
//           ElMessage.warning('读取用户信息失败,请重新登录')
//           userStore.resetSaveData() // 重设表单
//         })
//     }
//     const user = userStore.getUser()
//     if (!user) {
//       ElMessage.error('该账号已被管理员删除,请联系管理员处理')
//       // user为空 -> 一般存在于管理员删除自己的账号
//       userStore.resetSaveData()
//       next({ name: 'index' })
//       return // 阻止进一步的路由处理
//     }
//     if (isAdminRoute && !user.ifAdmin) {
//       ElMessage.warning('您不是管理员,无法访问管理员界面')
//       next({ name: 'index' })
//       return // 阻止进一步的路由处理
//     }
//     next() // 这个一定要加，没有next()页面不会跳转的。这部分还不清楚的去翻一下官网就明白了
//   } else {
//     userStore.resetSaveData() // 重置表单存储
//     if (isAdminRoute || (to.name !== 'index' && to.name !== 'NotFound')) {
//       ElMessage.warning('在未登录前，禁止访问其他页面！')
//       next({ name: 'index' })
//       return
//     }
//     next()
//   }
// })
// 进入路由后
router.afterEach(() => {
  NProgress.done() // 在即将进入新的页面组件前，关闭掉进度条
})
export default router
